/*
 * LWSDK Header File
 * Copyright 1999, NewTek, Inc.
 *
 * LWHOST.H -- LightWave Host Services
 *
 * This header contains the declarations for globals provided by all
 * LightWave host applications.
 */
#ifndef LWSDK_HOST_H
#define LWSDK_HOST_H

#include <lwsdk/lwdialog.h>


/*
 * File Request Function.  This function is returned as the "File Request"
 * global service.  It gets a simple filename from the user.
 */
#define LWFILEREQFUNC_GLOBAL		"File Request"

typedef int	LWFileReqFunc (const char *hail, char *name,
			       char *path, char *fullName, int buflen);


/*
 * File Request Activate Function.  This function is returned as the
 * "File Request 2" global service.  It takes a file request local struct
 * and version number and returns the activation code directly.
 */
#define LWFILEACTIVATEFUNC_GLOBAL	"File Request 2"

typedef int	LWFileActivateFunc (int version, LWFileReqLocal *);


/*
 * Color Picker Activate Function.  This function is returned as the
 * "Color Picker" global service.  It takes a color picker local struct
 * and version number and returns the activation code directly.
 */
#define LWCOLORACTIVATEFUNC_GLOBAL	"Color Picker"

typedef int	LWColorActivateFunc (int version, LWColorPickLocal *);


/*
 * File Type Function.  This function is returned as the "File Type Pattern"
 * global service.  It returns filename pattern strings given file type
 * code strings.
 */
#define LWFILETYPEFUNC_GLOBAL		"File Type Pattern"

typedef const char *
		LWFileTypeFunc (const char *);


/*
 * Directory Function.  This function is returned as the "Directory Info"
 * global service.  It returns filename pattern strings given file type
 * code strings.
 */
#define LWDIRINFOFUNC_GLOBAL		"Directory Info"

typedef const char *
		LWDirInfoFunc (const char *);

/*
 * These file type code strings are recognized by the File Type and Directory Info
 * Functions. They correspond with the current configuration for the system.
 */
#define LWFTYPE_CONTENT     "Content"
#define LWFTYPE_ANIMATION	"Animations"
#define LWFTYPE_IMAGE		"Images"
#define LWFTYPE_ENVELOPE	"Envelopes"
#define LWFTYPE_MOTION		"Motions"
#define LWFTYPE_OBJECT		"Objects"
#define LWFTYPE_PLUGIN		"Plug-ins"
#define LWFTYPE_PREVIEW		"Previews"
#define LWFTYPE_PSFONT		"PSFonts"
#define LWFTYPE_SCENE		"Scenes"
#define LWFTYPE_SETTING		"Settings"
#define LWFTYPE_SURFACE		"Surfaces"
/****
 * Message Functions.  This block of functions is returned as the
 * "Info Messages 2" global service.  They display various info
 * and other confirmation dialogs to the user. 
 * The return codes are as follows:
 *  OKCancel                     ok(1) cancel(0)
 *  YesNo                       yes(1) no(0)
 *  YesNoCancel           yes(2) no(1) cancel(0)
 *  YesNoAll    yesAll(3) yes(2) no(1) cancel(0)
 ****
 */
#define LWMESSAGEFUNCS_GLOBAL		"Info Messages 2"

typedef struct st_LWMessageFuncs {
	void	(*info)     (const char *, const char *);
	void	(*error)    (const char *, const char *);
	void	(*warning)  (const char *, const char *);
	int	(*okCancel) (const char *ttl, const char *, const char *);
	int	(*yesNo)    (const char *ttl, const char *, const char *);
	int	(*yesNoCan) (const char *ttl, const char *, const char *);
	int	(*yesNoAll) (const char *ttl, const char *, const char *);
} LWMessageFuncs;


/*
 * System Information.  The value returned as the "System ID" global is
 * a value that should be parsed into bits.  The low bits are the dongle
 * serial number and the high bits are the application code.
 */
#define LWSYSTEMID_GLOBAL	"System ID"

#define LWSYS_TYPEBITS		0xF0000000
#define LWSYS_SERIALBITS	0x0FFFFFFF

#define LWSYS_LAYOUT		0x00000000
#define LWSYS_MODELER		0x10000000
#define LWSYS_SCREAMERNET	0x20000000


/*
 * Product Information.  The value returned as the "Product Info" global
 * is a value that should be parsed into bits.  The various groups of
 * bits contain codes for the specific product and revision.
 */
#define LWPRODUCTINFO_GLOBAL	"Product Info"

#define LWINF_PRODUCT		0x0000000F
#define LWINF_BUILD		0x0000FFF0
#define LWINF_MINORREV		0x000F0000
#define LWINF_MAJORREV		0x00F00000
#define LWINF_RESERVED		0xFF000000

#define LWINF_PRODLWAV		0x00000001
#define LWINF_PRODINSP3D	0x00000002
#define LWINF_PRODOTHER		0x00000004

#define LWINF_GETMAJOR(x)	(((x) & LWINF_MAJORREV) >> 20)
#define LWINF_GETMINOR(x)	(((x) & LWINF_MINORREV) >> 16)
#define LWINF_GETBUILD(x)	(((x) & LWINF_BUILD)    >>  4)


/*
 * Locale Information.  The value returned as the "Locale Info" global
 * is a value whose low bits contain the locale ID for the host
 * application.  The possible values are the LANGID codes defined in
 * lwserver.
 */
#define LWLOCALEINFO_GLOBAL	"Locale Info"

#define LWLOC_LANGID            0x0000FFFF
#define LWLOC_RESERVED          0xFFFF0000

#endif

